package com.jiangruan.javaproject.request;
/**
 * @author:xulonghua
 * @email:3162193565@qq.com desc:
 * datatime 2021/12/7 10:25
 */

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
import java.util.Set;

/**
 *@author:xulonghua
 *@email:3162193565@qq.com
 *desc:该类用于封装提供网络请求的功能代码，用于发起网络请求，
 * 并将网络的数据进行返回
 *datatime 2021/12/7 10:25
 */
public class HttpUtils {
    /*
    * 该函数用于实现get请求，并将请求的结果进行返回
    * @param path   请求的资源路径
    * @return 请求的结果*/
    //path请求的路径
    public static String  get(String path){
        InputStream inputStream =null;
        InputStreamReader inputStreamReader=null;
        BufferedReader reader =null;
        String line=""; //最开始的空行
        String result ="";//每次读取到以后都要累加起来的读取结果
        try {
            //Union Resource Location 同一资源定位
            URL url=new URL ( path );
           URLConnection connection=  url.openConnection ();
           //进行连接
           connection.connect ();
           //
          inputStream= connection.getInputStream ();
          //字符流 :按行读
            //转换流   字节流转换为字符流
             inputStreamReader=new InputStreamReader (inputStream  );
              reader=new BufferedReader (inputStreamReader);
             //每次读取一行
//            String Line= reader.readLine ();
//            while (Line !=null){
//                reader.readLine ();
//            }
            while ((line = reader.readLine ())!=null){
                //将读到的数据累加给result
                result+=line;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace ();
        } catch (IOException e) {
            e.printStackTrace ();
        }finally {
            //关闭读取流
            try {
            if (reader !=null){
                    reader.close ();
            }
            if (inputStreamReader !=null){
                inputStreamReader.close ();
            }
            if (inputStream !=null){
                inputStream.close ();
            }
            } catch (IOException e) {
                e.printStackTrace ();
            }
        }
        return result;
    }
    public  static  String post(String path, Map<String,String> header, byte[] data){
        /*
         * 该方法用于实现一个post请求，并将请求的解析到返回*/
        BufferedReader reader=null;  //读取响应结果
        OutputStream output=null;
        String result="";
        try {
            URL url=new URL ( path );
            HttpURLConnection conn =(HttpURLConnection) url.openConnection ();
            conn.setRequestMethod ( "POST" );//设置post请求
            conn.setDoInput ( true );//允许从服务端接收数据
            conn.setDoOutput ( true );//允许从服务端发送数据

            //设置请求头
            //ContentType ：application/json
            //Authorization："Basic"+base64(用户名密码)
            if (!header.isEmpty ()){//如果请求头不为空，则要将用户需要设置
                //设置请求头
                //java中遍历map
                Set<String> keys =header.keySet ();
                for (String key:keys){
                    String value=header.get ( key );
                    //将拿到的key和value设置请求头属性中
                    conn.setRequestProperty ( key,value );
                }
                //线连接
                conn.connect ();
                //输出流
                output =conn.getOutputStream ();
                //将请求的数据发送出去（发送到服务端）
                output.write ( data );
                output.flush ();
                //接收响应数据
                reader=   new BufferedReader ( new InputStreamReader ( conn.getInputStream () ) );
                String line=null;
                while ((line=reader.readLine ())!=null){
                    result+=line;
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace ();
        } catch (IOException e) {
            e.printStackTrace ();
        }finally {
            //关闭读取流
            try {
                if (reader !=null){
                    reader.close ();
                }
                if (output !=null) {
                    output.close ();
                }

            } catch (IOException e) {
                e.printStackTrace ();
            }
        }
        return result;
    }
}
